﻿# -*- coding: utf-8 -*-
#############################
# Módulo:   calculate_wer.py
# Autor:    Pablo Andrés Paliza
# Fecha:    2014/09
# Versión:  1.0
#
# Descripción: Modulo para calcular el WER (Word Error Rate) de todos los archivos que se encuntren en el directorio input_directory
###############################

#TODO: Recibir input_directory por parametro, cambiar formato de salida

import wer
import os


#Warning Refactorizar este metodo.
input_directory =r'/home/andres/_tesis/scSVN2/trunk/FixedToCheck/FixedToCheck/'


def calculate_wer():
    base= 0
    corrected=0
    correctedErrorCount=0
    result=0
    strResult=""
    OCRErrorCount=0
    
    d=input_directory
        
    ficheros = os.listdir(d)
    for f in ficheros:
        if f[-4:]=='.txt' and f[-6:]!='al.txt' and f[-6:]!='ed.txt':
            #print WER
            ref=f[:len(f) - 4 ]+".Fixed.txt"
            hyp=f[:len(f) - 4 ]+".corrected.txt"
            print "::::::::::::::WER::::::::::"
            print "REF: "+ ref+"   HYP: "+hyp
            fref=open(os.path.join(d,ref))
            #strRef= fref.read()            
            fhyp=open(os.path.join(d,hyp))
            #strHyp= fhyp.read()          
            corrected= wer.wer(fref,fhyp)
            correctedErrorCount= correctedErrorCount +corrected
            fhyp.close()
            fref.close()
            print "REF: "+ ref+"   HYP: "+f
            fref2=open(os.path.join(d,ref))
            fhyp2=open(os.path.join(d,f))
            #strHyp= fhyp.read()
            base= wer.wer(fref2,fhyp2)           
            OCRErrorCount= OCRErrorCount + base
            result=corrected*100/base
            strResult=strResult+ ref +": "+ str(result) +"% corrected:"+str(corrected)+" base:"+str(base)+ " \n"
            fhyp2.close()            
            fref2.close()
            
    print "Corrected Error Count: " + str(correctedErrorCount) + " OCR error count: "+ str(OCRErrorCount)        
   #print strResult #WARNING This is wrong because I'm comparing the numbers of changes but not is the changes are correct (bad substitutions)

calculate_wer()